/*
 * @Author: xiawei 1243162387@qq.com
 * @Date: 2023-12-01 08:02:34
 * @LastEditors: xiawei 1243162387@qq.com
 * @LastEditTime: 2024-05-17 15:35:58
 */
import { defineConfig } from 'vite'
import { compression } from 'vite-plugin-compression2'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// 打包分析
import { visualizer } from 'rollup-plugin-visualizer';
// cdn配置
import { Plugin as importToCDN } from 'vite-plugin-cdn-import'
// vue组件扩展插件（name设置）
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import DefineOptions from 'unplugin-vue-define-options/vite'
// 实现路径别名
import { resolve } from 'path'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    vueSetupExtend(),
    DefineOptions(),
    // 就是使用这个插件实现的文件压缩
    compression({
      threshold: 2000, // 设置只有超过 2k 的文件才执行压缩
      deleteOriginalAssets: false, // 设置是否删除原文件
      skipIfLargerOrEqual: true, // 如果压缩后的文件大小与原文件大小一致或者更大时，不进行压缩
    }),
    // 打包分析
    visualizer(),
    // 第三方库CDN引入
    importToCDN({
      prodUrl: 'https://unpkg.com/{name}@{path}',
      modules: [
        {
          name: 'vue',
          var: 'Vue',
          path: '3.4.23/dist/vue.global.prod.js'
        },
        {
          name: 'vue-router',
          var: 'VueRouter',
          path: '4.2.5'
        },
        {
          name: 'element-plus',
          var: 'ElementPlus',
          path: '2.4.2',
          css: '2.4.2/dist/index.css'
        },
        {
          name: '@element-plus/icons-vue',
          var: 'ElementPlusIconsVue', // 根据main.js中定义的来
          path: '2.1.0'
        }
      ]
    })
  ],
  server: {
    port: 9000,

    proxy: {
      '^/api': {
        target: 'http://localhost:3000/', //目标源，目标服务器，真实请求地址
        changeOrigin: true, //支持跨域
        rewrite: (path) => path.replace(/^\/api/, "/api"), //重写真实路径,替换/api
      },
      '^/uploads': {
        target: 'http://localhost:3000/', //目标源，目标服务器，真实请求地址
        changeOrigin: true, //支持跨域
        rewrite: (path) => path.replace(/^\/uploads/, "/"), //重写真实路径,替换/api
      }
    }
  },
  resolve: {
    alias: {
      '@': resolve('./src'),
      packages: resolve("../packages")
    }
  },
  build: {
    minify: true,
    rollupOptions: {
      output: { // 打包输出的配置
        manualChunks: (id) => {
          // 最小化拆包
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        }
      }
    }
  }
})


